// 引入必要的命名空间
using Microsoft.AspNetCore.Authorization; // 提供授权相关的功能
using Microsoft.AspNetCore.Mvc; // 提供MVC控制器和ActionResult支持
using UniversalAdmin.Application.DTOs; // 引入数据传输对象
using UniversalAdmin.Application.Services; // 引入服务层接口

// 定义控制器命名空间
namespace UniversalAdmin.Api.Controllers
{
    // 标记为API控制器
    [ApiController]
    // 定义路由模板
    [Route("api/v1/[controller]")]
    public class AuthController : ControllerBase
    {
        // 声明认证服务接口
        private readonly IAuthService _authService;

        // 构造函数，依赖注入IAuthService
        public AuthController(IAuthService authService)
        {
            _authService = authService;
        }

        // 处理用户登录请求
        [HttpPost("login")]
        public async Task<IActionResult> Login([FromBody] LoginDto loginDto)
        {
            try
            {
                // 调用认证服务进行登录
                var loginResponse = await _authService.LoginAsync(loginDto);
                // 返回登录成功响应
                return Ok(loginResponse);
            }
            catch (UnauthorizedAccessException ex)
            {
                // 返回未授权响应
                return Unauthorized(new { message = ex.Message });
            }
            catch (ArgumentException ex)
            {
                // 返回参数错误响应
                return BadRequest(new { message = ex.Message });
            }
        }

        // 处理用户注册请求
        [HttpPost("register")]
        public async Task<IActionResult> Register([FromBody] RegisterDto registerDto)
        {
            try
            {
                // 调用认证服务进行注册
                var success = await _authService.RegisterAsync(registerDto);
                // 检查注册是否成功
                if (success)
                {
                    // 返回注册成功响应
                    return Ok(new { message = "注册成功" });
                }
                // 返回注册失败响应
                return BadRequest(new { message = "注册失败" });
            }
            catch (ArgumentException ex)
            {
                // 返回参数错误响应
                return BadRequest(new { message = ex.Message });
            }
        }

        // 处理用户注销请求
        [HttpPost("logout")]
        public async Task<IActionResult> Logout([FromBody] LogoutRequestDto logoutRequest)
        {
            try
            {
                await _authService.LogoutAsync(logoutRequest.Token);
                return Ok(new { message = "注销成功" });
            }
            catch (Exception ex)
            {
                return BadRequest(new { message = ex.Message });
            }
        }
    }
}